<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    function arr(box) {
      let n = box.length;
      let m = box[0].length;
      let res = new Array(m).fill('*').map(() => new Array(n).fill('*'));
      //将原始矩阵倒置过来放到新矩阵里。
      for (let i = 0; i < n; i++) {
        for (let j = 0; j < m; j++) {
          res[j][n - i - 1] = box[i][j];
        }
      }
      //console.log(res);
      //考虑到对于任意一个可下坠的石头，其碰到固定障碍物就会停下来，那么我们只需要记录下每个障碍物上面堆了几个石头就可以确定
      //每个石头翻转后的位置。
      //用k来记录每个障碍物'*'的位置，当遇到石头时，默认其下坠，腾出位置变成空'.'，这个石头堆到障碍物上面一个位置。
      //即res[--k][i] = '#'；
      for (let i = 0; i < n; i++) {
        for (let j = m - 1, k = m; j >= 0; j--) {
          if (res[j][i] === '*') k = j;
          if (res[j][i] === '#') {
            res[j][i] = '.';
            //console.log(j+' '+k);
            res[--k][i] = '#';
          }
        }
      }
      return res;
    };
    console.log(arr([["#", ".", "#"]]));
  </script>
</body>

</html>